﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Ext.Net;

public partial class Views_TypeOfLanguages : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            StoreLanguage_LoadData();
        }
    }

    protected void StoreLanguage_ReadData(object sender, Ext.Net.StoreReadDataEventArgs e)
    {
        StoreLanguage_LoadData();
    }

    private void StoreLanguage_LoadData()
    {
        using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
        {
            StoreLanguage.DataSource = db.TypeOfLanguages.ToList<TypeOfLanguage>();
            StoreLanguage.DataBind();

            GridPanelLanguage.ActiveIndex = -1;
        }
    }

    protected void RowSelected(object sender, DirectEventArgs e)
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                RowSelectionModel rsm = null;

                try
                {
                    rsm = GridPanelLanguage.SelectionModel.Primary as RowSelectionModel;
                    if (rsm.SelectedRow == null)
                    {
                        X.Msg.Alert("Thông báo", "Bạn chưa chọn trình độ để ...").Show();
                        return;
                    }
                }
                catch (Exception)
                {
                    X.Msg.Alert("Thông báo", "Bạn chưa chọn trình độ để ...").Show();
                    return;
                }

                int langID = Int32.Parse(rsm.SelectedRow.RecordID);
                TypeOfLanguage tl = db.TypeOfLanguages.Single(t => t.LanguageID == langID);


                lblViewName.Text = tl.NameOfLangs;
                lblViewDes.Text = tl.Descriptons;
                chkViewStatus.Checked = Boolean.Parse(tl.StatusOfLangs.ToString());
            }

        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    protected void btnAdd_DirectClick(object sender, DirectEventArgs e)
    {
        WindowAdd.Hidden = false;
        ResetForm_WindowAdd();
    }

    [DirectMethod]
    public void TypeOfLanguage_Add()
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                string name = txtAddNameofLang.Text.Trim();

                List<TypeOfLanguage> info = db.TypeOfLanguages.ToList<TypeOfLanguage>();
                foreach (var item in info)
                {
                    if (item.NameOfLangs.ToLower().Equals(name.ToLower()))
                    {
                        lblFormAddMsg.Text = "Tên trình độ này đã tồn tại, hãy nhập tên khác";
                        txtAddNameofLang.Focus(true, 100);
                        return;
                    }
                }
                TypeOfLanguage tl = new TypeOfLanguage()
                {
                    NameOfLangs = name,
                    Descriptons = txtAddDes.Text.Trim(),
                    StatusOfLangs = chkAdd.Checked
                };
                db.TypeOfLanguages.Add(tl);
                db.SaveChanges();

                StoreLanguage_LoadData();
                WindowAdd.Hidden = true;

                X.Msg.Alert("Thông báo", "Thêm mới trình độ ngoại ngữ thành công").Show();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    protected void btnAddCancel_DirectClick(object sender, DirectEventArgs e)
    {
        WindowAdd.Hidden = true;
    }

    protected void btnUpdate_DirectClick(object sender, DirectEventArgs e)
    {
        try
        {
            lblUpdateMsg.Text = "";
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                RowSelectionModel rsm = null;

                try
                {
                    rsm = GridPanelLanguage.SelectionModel.Primary as RowSelectionModel;
                    if (rsm.SelectedRow == null)
                    {
                        X.Msg.Alert("Thông báo", "Bạn chưa chọn trình độ để chỉnh sửa").Show();
                        return;
                    }

                    int langID = Int32.Parse(rsm.SelectedRow.RecordID);
                    TypeOfLanguage tl = db.TypeOfLanguages.Single(t => t.LanguageID == langID);

                    txtUpdateName.Text = tl.NameOfLangs;
                    txtUpdateDes.Text = tl.Descriptons;
                    chkUpdate.Checked = Boolean.Parse(tl.StatusOfLangs.ToString());

                    WindowUpdate.Hidden = false;
                }
                catch (Exception)
                {
                    X.Msg.Alert("Thông báo", "Bạn chưa chọn trình độ để chỉnh sửa").Show();
                    return;
                }
            }

        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    [DirectMethod]
    public void TypeOfLanguage_Update()
    {
        try
        {
            lblUpdateMsg.Text = "";
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                RowSelectionModel rsm = null;

                try
                {
                    rsm = GridPanelLanguage.SelectionModel.Primary as RowSelectionModel;
                    if (rsm.SelectedRow == null)
                    {
                        X.Msg.Alert("Thông báo", "Bạn chưa chọn trình độ để chỉnh sửa").Show();
                        return;
                    }
                }
                catch (Exception)
                {
                    X.Msg.Alert("Thông báo", "Bạn chưa chọn trình độ để chỉnh sửa").Show();
                    return;
                }

                int langID = Int32.Parse(rsm.SelectedRow.RecordID);
                TypeOfLanguage tl = db.TypeOfLanguages.Single(t => t.LanguageID == langID);

                string newName = txtUpdateName.Text.Trim();

                foreach (var item in db.TypeOfLanguages)
                {
                    if (item.NameOfLangs.ToLower().Equals(newName.ToLower()) && item.LanguageID != tl.LanguageID)
                    {
                        lblUpdateMsg.Text = "Tên trình độ này đã tồn tại, xin hãy nhập tên khác";
                        return;
                    }
                }
                tl.NameOfLangs = newName;
                tl.Descriptons = txtUpdateDes.Text.Trim();
                tl.StatusOfLangs = chkUpdate.Checked;

                db.SaveChanges();
                StoreLanguage_LoadData();

                WindowUpdate.Hidden = true;
                X.Msg.Alert("Thông báo", "Cập nhật thông tin trình độ ngoại ngữ thành công").Show();
            }

        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    protected void btnDelete_DirectClick(object sender, DirectEventArgs e)
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                RowSelectionModel rsm = null;
                TypeOfLanguage tl = null;

                try
                {
                    rsm = GridPanelLanguage.SelectionModel.Primary as RowSelectionModel;
                    if (rsm.SelectedRow == null)
                    {
                        X.Msg.Alert("Thông báo", "Bạn chưa chọn trình độ để xóa").Show();
                        return;
                    }

                    int langID = Int32.Parse(rsm.SelectedRow.RecordID);
                    tl = db.TypeOfLanguages.Single(t => t.LanguageID == langID);
                }
                catch (Exception)
                {
                    X.Msg.Alert("Thông báo", "Bạn chưa chọn trình độ để xóa").Show();
                    return;
                }

                X.Msg.Confirm("Thông báo hệ thống", String.Format("Bạn có muốn xóa trình độ ngoại ngữ đã chọn ? [{0}]", tl.NameOfLangs),
                        new MessageBoxButtonsConfig()
                        {
                            Yes = new MessageBoxButtonConfig
                            {
                                Text = "Xóa",
                                Handler = "App.direct.DoYes_DeleteTypeOfLanguage();"
                            },
                            No = new MessageBoxButtonConfig
                            {
                                Text = "Hủy bỏ"
                            }
                        }).Show();
            }

        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    [DirectMethod]
    public void DoYes_DeleteTypeOfLanguage()
    {
        try
        {
            lblUpdateMsg.Text = "";
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                RowSelectionModel rsm = GridPanelLanguage.SelectionModel.Primary as RowSelectionModel;

                int langID = Int32.Parse(rsm.SelectedRow.RecordID);
                TypeOfLanguage tl = db.TypeOfLanguages.Single(t => t.LanguageID == langID);

                db.TypeOfLanguages.Remove(tl);

                db.SaveChanges();
                StoreLanguage_LoadData();
                ResetControls_ViewInfo();


                WindowUpdate.Hidden = true;
                X.Msg.Alert("Thông báo", "Xóa trình độ ngoại thành công").Show();
            }

        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    private void ResetForm_WindowAdd()
    {
        lblFormAddMsg.Text = "";
        txtAddNameofLang.Text = "";
        txtAddDes.Text = "";
        chkAdd.Checked = false;
    }

    private void ResetControls_ViewInfo()
    {
        lblViewName.Text = "";
        lblViewDes.Text = "";
        chkUpdate.Checked = false;
    }
}